#ifndef __WD_FUNC_H
#define __WD_FUNC_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <syslog.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
#include <sys/sem.h>
#include <pthread.h>
#include <stdbool.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <strings.h>
#include <sys/epoll.h>
#include <sys/uio.h>
#include <sys/sendfile.h>
#include <crypt.h>
#include <shadow.h>
#include <asm-generic/socket.h>
#include <mysql/mysql.h>
#include <openssl/md5.h>
#include <l8w8jwt/encode.h>

#define SIZE(a) (sizeof(a)/sizeof(a[0]))

#define ARGS_CHECK(argc, n) {               \
    if (argc != n) {                        \
        fprintf(stderr, "Error: expected %d arguments\n", n);   \
        exit(1);                            \
    }                                       \
}

#define ERROR_CHECK(retval, val, msg) {    \
    if (retval == val) {                   \
        perror(msg);                       \
            exit(1);                       \
    }                                      \
}

//thread_error_check没有退出进程的 
#define THREAD_ERROR_CHECK(ret, msg) {                  \
    if(ret != 0) {                                      \
        fprintf(stderr, "%s:%s\n", msg, strerror(ret)); \
    }                                                   \
}
#endif

